package cc.sunni;

import cn.hutool.core.collection.CollectionUtil;
import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;

//import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.List;

/**
 * @Author: jiangli
 * @Date: 2021/1/6 16:37
 * 将多张图片合并转为PDF
 */
public class ImageToPdfUtil {
    /**
     * 保存到本地
     *
     * @param imageFolderPath 图片文件夹地址
     * @param pdfPath         PDF文件保存地址
     */
    public static void toPdf(String imageFolderPath, String pdfPath) {
        //创建一个文档对象
        Document doc = new Document();
        try {
            // 输入流
            FileOutputStream fos = new FileOutputStream(pdfPath);
            // 写入PDF文档
            PdfWriter.getInstance(doc, fos);
            //开启文档
            doc.open();
            // 获取图片文件夹对象
            File file = new File(imageFolderPath);
            File[] files = file.listFiles();
            // 循环获取图片文件夹内的图片
            if (files != null && files.length > 0) {
                for (File f : files) {
                    if (f.getName().endsWith(".png")
                            || f.getName().endsWith(".jpg")
                            || f.getName().endsWith(".gif")
                            || f.getName().endsWith(".jpeg")
                            || f.getName().endsWith(".tif")) {
                        String imagePath = imageFolderPath + f.getName();
                        // 实例化图片
                        Image image = Image.getInstance(imagePath);
                        //设置图片居中显示
                        image.setAlignment(Image.MIDDLE);
                        // 添加图片到文档
                        doc.add(image);
                        // 换行,增加间距
                        doc.add(new Paragraph("\n"));
                    }
                }
            }
            // 关闭文档
            doc.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /**
     * 通过流下载
     *
     * @param imageList image集合
     * @param response  响应
     */
//    public static void downloadPdf(List<BufferedImage> imageList, HttpServletResponse response) {
//        String fileName = "材料二维码.pdf";
//        OutputStream outputStream;
//        //创建一个文档对象
//        Document doc = new Document();
//        try {
//            // 防止中文乱码
//            fileName = URLEncoder.encode(fileName, "UTF-8");
//            response.reset();
//            response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
//            response.setContentType("application/octet-stream;charset=UTF-8");
//            outputStream = new BufferedOutputStream(response.getOutputStream());
//            // 写入PDF文档
//            PdfWriter.getInstance(doc, outputStream);
//            //开启文档
//            doc.open();
//            // 循环获取图片文件夹内的图片
//            if (CollectionUtil.isNotEmpty(imageList)) {
//                for (BufferedImage bufferedImage : imageList) {
//                    // 实例化图片
//                    Image image = Image.getInstance(bufferedImage, null);
//                    //设置图片居中显示
//                    image.setAlignment(Image.MIDDLE);
//                    // 添加图片到文档
//                    doc.add(image);
//                    // 换行,增加间距
//                    doc.add(new Paragraph("\n"));
//                }
//            }
//            // 关闭文档
//            doc.close();
//            outputStream.flush();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
    public static void main(String[] args) {
        toPdf("D:/", "D:/demo.test.pdf");
    }
}